home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mmdf / mmdf-IIb.43 / src / smtp / tcp.v7.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-03-31  |  1.2 KB  |  54 lines

  1. /*
  2.  *        T C P _ U I C P . C
  3.  *
  4.  *    Open a TCP/SMTP connection using Berkeley 4.2 style networking.
  5.  *
  6.  *    Doug Kingston, 3 Jan 83 at BRL.
  7.  */
  8. #include "util.h"        /* includes <sys/types.h>, and others */
  9. #include "mmdf.h"
  10. #include <NET/longid.h>
  11. #include <NET/net_types.h>
  12. #include <NET/socket.h>
  13. #include <NET/in.h>
  14.  
  15. extern LLog *logptr;
  16. extern int errno;
  17.  
  18. tc_uicp (addr, sock, timeout, fds)
  19. long addr;
  20. long sock;    /* IGNORED */    /* absolute socket number       */
  21. int timeout;            /* time to wait for open        */
  22. Pip *fds;
  23. {
  24.     register int skt;
  25.     struct sockaddr_in saddr;
  26.  
  27.     saddr.sin_family = AF_INET;
  28.     saddr.sin_port = htons(IPPORT_SMTP);
  29.     saddr.sin_addr.s_addr = htonl(addr);
  30.  
  31.     skt = socket( SOCK_STREAM, 0, (struct sockaddr_in *) 0, SO_DONTLINGER );
  32.     if( skt < 0 ) {
  33.         ll_log( logptr, LLOGFST, "Can't get socket (%d)", errno);
  34.         return( RP_LIO );
  35.     }
  36.  
  37.     if (setjmp(timerest)) {
  38.         close(skt);
  39.         return ( RP_TIME );
  40.     }
  41.  
  42.     s_alarm( timeout );
  43.     if( connect(skt, &saddr) < 0 ) {
  44.         close( skt );
  45.         s_alarm( 0 );
  46.         ll_log( logptr, LLOGFST, "Can't get connection (%d)", errno);
  47.         return( RP_DHST );
  48.     }
  49.     s_alarm( 0 );
  50.     fds -> pip.prd = skt;
  51.     fds -> pip.pwrt = dup(skt);
  52.     return (RP_OK);
  53. }
  54.